DLLによるハンドラの実装

概要

マニフェストに拡張ポイントとして定義したコマンドやイベントに対して、それらの処理を実装します。 それらの処理を実装したクラスメソッドを コマンドハンドライベントハンドラ と呼びます。 それらのハンドラは IExtension インタフェースを実装した公開クラス(以下、メインクラス)に公開メソッドとして実装します。 メインクラスの名前とクラスファイルの名前は任意で構いません。

実装例

マニフェストで次のようなコマンドが定義されている場合について、コマンドハンドラの実装例を示します。

マニフェストのコマンド定義例

  "extensionPoints": {
    "commands": [
      {
        "id": "Command.SayHello",
        "execFunc": "SayHello"
      }
    ],
    ...
  }

上記コマンド定義例の場合、extensionPoints.commands[0].execFunc プロパティに指定されている SayHello という名前のコマンドハンドラを、メインクラスの公開メソッドとして実装します。

メインクラスでのコマンドハンドラの実装例

// エクステンション開発で参照するAPIの名前空間の宣言
using NextDesign.Extension;
using NextDesign.Core;
using NextDesign.Desktop;

// エントリーポイントとなるDLLのメインクラス
// メインクラスではIExtensionインタフェースを実装します。
// ハンドラはこのクラスの公開メソッドとして実装します。
public class MyExtension : IExtension
{
    // コマンドハンドラ
    public void SayHello(ICommandContext context,ICommandParams commandParams)
    {
        context.App.Window.UI.ShowInformationDialog("Hello !","Hello World");
    }

    // エクステンションの初期化処理
    public void Activate(IContext context)
    {
        // 処理なしの場合も空メソッドとして実装
    }

    // エクステンションの終了処理
    public void Deactivate(IContext context)
    {
        // 処理なしの場合も空メソッドとして実装
    }
}

リファレンス

重要

  • エントリーポイントに指定した DLL ファイルには、IExtension インタフェースを実装したメインクラスが1つ含まれている必要があります。
  • すべてのハンドラはそのメインクラスの公開メソッドとして実装する必要があります。

Tip

  • 大規模なエクステンション開発の場合、ハンドラの数も多くなるためエントリーポイントの実装コードも肥大化します。 エントリーポイントの実装コードをコンパクトにするためには、次のようなファイル構造とすることを推奨します。
    • 実際の処理をエントリーポイントとは別のファイルに実装してファイルを分割します。
    • エントリーポイントのファイルに実装するハンドラでは、別ファイルに実装した関数、もしくは、別クラスに実装したクラスメソッドを呼び出します。

補足

メインクラスでの IExtension インタフェースの実装

  • .Net DLL による実装方法の場合、エントリーポイントに指定する DLL ファイルには IExtension インタフェース を実装したメインクラスが1つ必要です。

  • メインクラスは公開クラスとして実装します。

  • メインクラスに IExtension インタフェースを実装するために、Activate, Deactviate という名前の公開メソッドを実装します。

    Activate メソッド : エクステンションのライフサイクルが開始した直後に一度だけ実行されます。
    Deactivate メソッド : エクステンションのライフサイクルが終了する直前に一度だけ実行されます。

  • Activate , Deactivate メソッドには、コマンドやイベントごとに呼び出されるハンドラの処理とは別に、エクステンション全体に関する初期化処理や終了処理を実装できます。

    初期化処理の例: 共通変数の初期化、設定ファイルの読み込みなど
    終了処理の例: 状態や設定のファイル保存など

  • 初期化処理や終了処理が必要ない場合でも、空メソッドとして実装します。